SLA, SLO, SLI
Дмитрий Масленников, «Т-Банк»
Проблема оценки работы SRE
Как понять, сколько сбоев не случилось из-за того, что поработали SRE?
Проблема метрики оценки надежности
SLI — Service Level Indicators
Индикаторы уровня сервиса — важные метрики показывающие пользовательский опыт непосредственно
SLO — Service Level Objectives
Целевые показатели сервиса — значения SLI, которые мы желаем видеть у своего приложения
SLA — Service Level Agreement
Соглашение о уровне сервиса
Бюджет ошибок
Что можно делать с бюджетом? — Тратить!
Проблемы при подсчетах надежности
- Не понятно, что считать уже сломанным (выбор SLI/SLO)
- Установка желаемых целей сильно выше возможностей
- Сложно выбрать интервал, на котором считать
Как сделать учет SLA?
Нет готовых удобных инструментов — писать самому
schedule(1m, () => {
bool has_bad_minute = false;
int currentMinute = minute(timestamp());
for (indicator in indicators) {
if (indicator.fail()) {
mark_minute_bad(indicator.id, currentMinute);
has_bad_minute = true;
}
}
if (!has_bad_minute) {
mark_minute_ok(currentMinute);
}
})
Сервис такси
- Похож на «обычный» сервис такси
- Два мобильных приложения: для пользователей и водителей
- Умеет оценивать время поездки с учетом пробок и без (когда внешний сервис отвалился)
- in_request_count — количество запросов от клиентов в разбивке по типам
- in_request_duration — время выполнения запросов
- in_request_errors — количество запросов завершившися с ошибкой
- matching_requests — сколько пришло запросов на поиск автомобиля
- matching_requests_done_success — сколько таких запросов успешно обработали
- matching_requests_done_fail — сколько таких запросов не обработали
- awaiting_requests — сколько человек начинали ждать автомобиль
- awaiting_requests_done_success — сколько человек дождались подачи
- awaiting_requests_done_fail — сколько человек не дождались подачи
- и т.д. про все стадии
- match_duration — сколько времени ищем водителя
- estimated_awaiting_time — распределение оценочного времени подачи автомобиля
- estimated_trip_time — распределение оценочного времени поездки
- awaiting_time — сколько фактически ждали подачи автомобиля
- trip_time — сколько фактически длилась поездка
- estimation_discrepancy_await — разница между предсказанным и фактическим времением ожидания
- estimation_discrepancy_trip — разница между предсказанным и фактическим времением поездки
- traffic_jams_fallback_count — запросов не учитывают пробки